package br.unisul.prolinear.view;

import java.io.Serializable;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.event.ActionEvent;

import org.primefaces.event.SelectEvent;
import org.primefaces.event.UnselectEvent;

import br.unisul.prolinear.controller.AdmController;
import br.unisul.prolinear.controller.SystemController;
import br.unisul.prolinear.model.Usuario;

@ManagedBean
@ViewScoped
public class AdmBean extends Bean implements Serializable {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private UsuarioDataModel usuarios;
	private Usuario[] usuariosSelecionados;
	private AdmController admController;
	private boolean editaDisabled;
	private boolean deleteDisabled;
	private boolean desativaDisabled;
	private boolean reativaDisabled;
	private String assuntoMail;
	private String email;
	
	public AdmBean() {		
		admController = new AdmController();
		editaDisabled = true;
		deleteDisabled = true;
		desativaDisabled = true;
		reativaDisabled = true;
		atualizaListaUsuarios();
	}

	private void atualizaListaUsuarios(){
		usuario = SystemController.recarregaUsuario();
		usuarios = new UsuarioDataModel(admnistrador.getUsuarios());
	}

	public void desativarUsuario(ActionEvent actionEvent){
		admController.desativarUsuario(usuariosSelecionados[0]);		
		atualizaListaUsuarios();
		atualizaEnabled();
	}

	public void enviaEmailAlunos(ActionEvent actionEvent){
		admController.enviaEmailAlunos(usuariosSelecionados, assuntoMail + " ["+usuario.getNome()+ "]", email);
	}
	
	public void editaUsuario(ActionEvent actionEvent){
		admController.editaUsuario(usuariosSelecionados[0]);		
	}

	public void editaCadastro(ActionEvent actionEvent){
		admController.editaUsuario(admnistrador);
	}

	public void reativarUsuario(ActionEvent actionEvent){
		admController.reativaUsuario(usuariosSelecionados[0]);		
		atualizaListaUsuarios();
		atualizaEnabled();
	}

	public void excluiUsuarios(ActionEvent actionEvent){
		admController.excluiUsuarios(usuariosSelecionados);
		atualizaListaUsuarios();
		atualizaEnabled();
	}

	public void onRowSelect(SelectEvent event) {
		atualizaEnabled();
	}
	public void onRowUnselect(UnselectEvent event){
		atualizaEnabled();
	}

	public void atualizaEnabled(){
		editaDisabled = usuariosSelecionados.length != 1;
		deleteDisabled = usuariosSelecionados.length == 0;
		desativaDisabled = editaDisabled || !usuariosSelecionados[0].isAtivo();
		reativaDisabled = editaDisabled || usuariosSelecionados[0].isAtivo();
	}

	public UsuarioDataModel getUsuarios() {
		return usuarios;
	}

	public void setUsuarios(UsuarioDataModel usuarios) {
		this.usuarios = usuarios;
	}

	public Usuario[] getUsuariosSelecionados() {
		return usuariosSelecionados;
	}

	public void setUsuariosSelecionados(Usuario[] usuariosSelecionados) {
		this.usuariosSelecionados = usuariosSelecionados;
	}

	public boolean isEditaDisabled() {
		return editaDisabled;
	}

	public void setEditaDisabled(boolean editaDisabled) {
		this.editaDisabled = editaDisabled;
	}

	public boolean isDeleteDisabled() {
		return deleteDisabled;
	}

	public void setDeleteDisabled(boolean deleteDisabled) {
		this.deleteDisabled = deleteDisabled;
	}

	public boolean isDesativaDisabled() {
		return desativaDisabled;
	}

	public void setDesativaDisabled(boolean desativaDisabled) {
		this.desativaDisabled = desativaDisabled;
	}

	public boolean isReativaDisabled() {
		return reativaDisabled;
	}

	public void setReativaDisabled(boolean reativaDisabled) {
		this.reativaDisabled = reativaDisabled;
	}

	public String getAssuntoMail() {
		return assuntoMail;
	}

	public void setAssuntoMail(String assuntoMail) {
		this.assuntoMail = assuntoMail;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}



}
